package view;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;

public class TelaSelecaoLinguagem extends JFrame implements ActionListener, WindowListener {

    private static final long serialVersionUID = 1L;

    static String iterativa = "Linguagem Iterativa";
    static String altoNivel = "Linguagem Alto Nível";

    private JRadioButton radioAltoNivel;
    private JRadioButton radioIterativa;

    private Tela tela;

    public TelaSelecaoLinguagem(final Tela tela) {

        this.tela = tela;

        radioIterativa = new JRadioButton(iterativa);
        radioAltoNivel = new JRadioButton(altoNivel);

        TipoLinguagem tipo = tela.getTipoLinguagem();
        if (tipo != null) {
            if (TipoLinguagem.ALTO_NIVEL.equals(tipo)) {
                radioAltoNivel.setSelected(true);
            } else {
                radioIterativa.setSelected(true);
            }
        }

        radioAltoNivel.setActionCommand(altoNivel);
        radioIterativa.setActionCommand(iterativa);

        radioIterativa.addActionListener(this);
        radioAltoNivel.addActionListener(this);

        ButtonGroup group = new ButtonGroup();
        group.add(radioIterativa);
        group.add(radioAltoNivel);

        JPanel radioPanel = new JPanel();
        radioPanel.add(radioIterativa);
        radioPanel.add(radioAltoNivel);

        JButton button = new JButton("Ok");
        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {

                if (radioAltoNivel.isSelected()) {
                    tela.setTipoLinguagem(TipoLinguagem.ALTO_NIVEL);

                    tela.setTelaLinguagem(null);
                    dispose();

                } else if (radioIterativa.isSelected()) {
                    tela.setTipoLinguagem(TipoLinguagem.ITERATIVA);

                    tela.setTelaLinguagem(null);
                    dispose();

                } else {
                    JOptionPane.showMessageDialog(null, "Selecione uma opção de linguagem!");
                }

            }
        });

        radioPanel.add(button);
        setContentPane(radioPanel);

        addWindowListener(this);
        setTitle("Linguagem de Entrada");
        setResizable(false);
        setLocationRelativeTo(null);
        pack();
        setVisible(true);
        requestFocusInWindow();
    }

    public void setTela(Tela tela) {
        this.tela = tela;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        tela.setLinguagem(true);
        if (iterativa.equals(e.getActionCommand())) {
            tela.setTipoLinguagem(TipoLinguagem.ITERATIVA);
        } else {
            tela.setTipoLinguagem(TipoLinguagem.ALTO_NIVEL);
        }
    }

    @Override
    public void windowActivated(WindowEvent arg0) {}

    @Override
    public void windowClosed(WindowEvent arg0) {}

    @Override
    public void windowClosing(WindowEvent arg0) {
        tela.setTelaLinguagem(null);
        dispose();
    }

    @Override
    public void windowDeactivated(WindowEvent arg0) {}

    @Override
    public void windowDeiconified(WindowEvent arg0) {}

    @Override
    public void windowIconified(WindowEvent arg0) {}

    @Override
    public void windowOpened(WindowEvent arg0) {}
}
